<!doctype html>
<html lang=ru>
<meta charset=utf-8>

<title>OpenSSH: История проекта</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="canonical" href="https://www.openssh.com/history.html">
<link rel="stylesheet" type="text/css" href="openbsd.css">

<h2 id=OpenBSD>
<a href="index.html">
<i>Open</i><b>SSH</b></a>
История проекта
</h2>
<hr>

<p>
В 1999 году некоторые разработчики OpenBSD поставили перед собой задачу
сделать SSH открытой и свободной для всех, включая использование
соответствующей лицензии, а также поддерживать код, создаваемой реализации.

<p>
OpenSSH основан на свободной версии SSH 1.2.12 от Tatu Yl&ouml;nen.
Эта версия была достаточно свободной, для использования её в нашем
проекте. Некоторые части OpenSSH все ещё находится под лицензией Tatu.
Эта и более старые версии использовали математические функции из
библиотеки libgmp. Библиотека libgmp доступна под (LGPL) Lesser GNU
Public Licence, хотя в то время она находилась под обычной (GPL) GNU
Public Licence.

<p>
Объединённая лицензия для всех частей OpenSSH доступна на
<a href="https://cvsweb.openbsd.org/src/usr.bin/ssh/LICENCE?rev=HEAD">
https://cvsweb.openbsd.org/src/usr.bin/ssh/LICENCE</a>.

<p>
Вскоре после выпуска Tatu версии 1.2.12, последующие версии выпускались
со все более ограничивающими лицензиями, хотя libgmp все ещё был включён и
необходим для использования SSH. Это фактически сделало SSH нарушителем GPL.
Первая из ограничивающих лицензий запрещала собирать версии для Windows и
DOS версии. Позднее они и вовсе запретили использование SSH в коммерческих
целях, предлагая купить достаточно дорогую версию у компании Datafellow.

<p>
В начале 1999 года Bj&ouml;rn Gr&ouml;nvall начал разбираться в работе
старой версии последней версии и исправлять ошибки. Его версия SSH называется
<a href="https://pkgserver.pdc.kth.se/pub/krypto/ossh/">OSSH</a>, и на тот момент
она поддерживала только SSH протокол версии 1.3. Говорят, что OSSH был
интегрирован в какой-то коммерческий продукт в Швеции. В OSSH никогда
поддерживал вторую версию протокола SSH. Bj&ouml;rn, вероятно, прекратил
разработку, когда OpenSSH стал достаточно стабильным.

<p>
Участники проекта OpenBSD узнали о работе Bj&ouml;rn'а менее чем за два
месяца до релиза <a href="https://www.openbsd.org/26.html">OpenBSD 2.6</a>.
Мы хотели включить поддержку ssh протокола в OpenBSD 2.6, но мы должны были
убедится в том, что OSSH идеальна (to make sure that it was perfect).
Поэтому мы решили взять за основу OSSH и продолжить работу над форком,
используя тот же процесс аудита безопасности, какой используется и для
остальной части OpenBSD.
Первоначальный коммит был сделан 26 сентября 1999 года, и на момент релиза,
два месяца спустя, многие из файлов с кодом уже были в RCS версии 1.34...
некоторые даже версии 1.66. Процесс разработки шел очень быстро, так как
мы deadline был уже не за горами.

<p>
Список разработчиков:

<ul>
<li>Theo de Raadt (Канада) удалил непортабельный код, который загромождал
    основной, делая его трудночитаемым. После этого некоторые ошибки, а так
    же ошибки в безопасности можно было заметить на много легче.
<li>Niels Provos (Германия, переехал в США) быстро удалил оставшиеся
    криптографические и GPL лицензированные компоненты, во время своего
    путешествия в Канаду. Таким образом, мы получили полностью свободный
    проект, над которым могли работать дальше.
<li>Markus Friedl (Германия) быстро присоединился к процессу разработки и
    очень быстро смог заменить код протокола SSH 1.3 из версии 1.2.12 на
    версию SSH 1.5, совместимый с новой серией ssh 1.2.27 (это позволило
    работать со множеством SSH-совместимых Windows клиентов, в которых нет
    поддержки SSH 1.3). Он добавил
    поддержку протокола SSH 1.5 таким образом, чтобы не поломать работу SSH
    1.3. Позже он также добавил поддержку протокола SSH 2 и SFTP.
<li>Bob Beck (Канада) помог с написанием Makefile таким образом, чтобы мы
    могли скомпилировать OpenSSL без запатентованных алгоритмов.
    Так как OpenBSD 2.6 вышел перед тем, как срок действия RSA патента
    закончился, нам необходимо было поставлять CD с библиотеками libssl и
    libcrypto, в которых отсутствовал RSA. Во время установки, пользователь
    мог заменить эти библиотеки по FTP/HTTP через Internet. К счастью этот
    хак больше не нужен.
<li>Aaron Campbell (Канада) устранил множество изъянов документации и
    несколько других проблем в коде. Главным образом благодаря ему man-страницы
    настолько полные.
<li>Dug Song (США) помог с несколькими проблемами аутентификации в KerberosIV
    (его изменения были тщательно проверены, чтобы убедится, что они не
    затронули криптографию, а решали только проблемы аутентификации).
</ul>

<p>
OpenSSH основан на старой версии ssh 1.2.12, но с удалением многих ошибок
и добавлением новых возможностей:

<ul>

<li>все компоненты, ограничивающие свободное распространение (т.е патенты, см.
<a href="https://man.openbsd.org/ssl.8">ssl</a>) были удалены из исходного
кода; все лицензированные или патентованные компоненты используются из внешних
библиотек.

<li>поддерживает аутентификацию по одноразовому паролю при помощи
<a href="https://man.openbsd.org/skey.1">skey</a>.

<li>сотни других изменений, которые можно определить по новым man-страницам
и изменениям исходного текста.

</ul>

<p>
Это относится к OpenSSH 1.2.2, который был включён в OpenBSD 2.6, 1 декабря
1999 года. С того времени, в разработке OpenSSH участвовали Aaron Campbell,
Bob Beck, Markus Friedl, Niels Provos, Theo de Raadt, и Dug Song. Мы
благодарим тех, кто нашёл ошибки и сообщил нам о них.

<h3 id=portable>Портированние OpenSSH</h3>
<p>
Почти сразу после того, как мы выпустили нашу реализацию протокола SSH 1,
многие различные группы, не относящиеся к OpenBSD, заинтересовались проектом.
Damien Miller, Philip Hands и многие другие начали портировать OpenSSH на
GNU/Linux и на другие Unix-образные операционные системы.
С самого начала нашей работы над проектом мы почувствовали, что даже
оригинальная реализация SSH была слишком сложной; она имела очень много
зависимостей операционной системы. Наш подход к написанию полностью
безопасного, надежного и чистого кода позволил избежать этого.
Чтобы облегчить процесс разработки для всех, мы отделили базовую разработку
от разработки над процессом портирования. Это очень хорошо сработало для нас.
(В качестве примера, сравните количество строк кода между базовой и
переносной версиями).

<h3>Поддержка протокола SSH 2</h3>
<p>
После выхода OpenBSD 2.6 Markus Friedl решил продолжить поддержку
<a href="goals.html">протокола SSH 2</a>. Работая несколько месяцев, он
сумел сохранить OpenSSH таким же простым и маленьким, но в тоже время
совместить поддержку обоих протоколов SSH 1 и SSH 2. Эта версия называлась
OpenSSH 2.0 и была включена в OpenBSD 2.7 15 июня 2000 года.
Проверкой изменений, сделанных Markus'ом, занимались Niels Provos и
Theo de Raadt. Боба Бека (Bob Beck) следует поблагодарить за обновление
externa библиотеки SSL до более новой версии.

<h3>Поддержка SFTP</h3>
<p>
Поддержка серверной части sub-protocol SFTP была реализована Markus
Friedl и включена в OpenSSH 2.3.0 в ноябре 2000 года. Вскоре после этого
Damien Miller начал работу над sftp-клиентом, который появился в OpenSSH
версии 2.5.0.

<h3>Сканирование версий SSH сервера</h3>
<p>
Для облегчения мониторинга используемых SSH-серверов, например для
сети компании, Niels Provos написал утилиту
<a href="https://www.monkey.org/~provos/scanssh/">scanssh</a>.
scanssh сканирует список адресов и сетей на наличие SSH-серверов и
номера их версий. Она поддерживает случайный выбор IP-адресов из
больших диапазонов сети и полезна для сбора статистики об использовании
SSH-серверов в компании или в Интернете в целом.
Статистика включает поддерживаемые SSH-протоколы и используемые версии
SSH-серверов.
